package es.srn.utils.temporal;

import java.util.Calendar;
import java.util.Date;

import es.srn.utils.ClsUtilsFechas.timeLapse;


/**
 * 
 * Clase para comparar tiempo.
 * 
 * @author Baskito
 * @version 04.11.2014
 * 
 * 
 */


public class DiferenciarHoras {
		
	 public enum eAlgo{
	    	ml,
	    	ss,
	    	mm,
	    	hh,
	    	dd
	 }
	 
	 
	private Date dateInit = null;
	private Date dateEnd = null;
	private timeLapse lastTimeLapse = null;
	
	public DiferenciarHoras(){
		
	}
	
	
	/*
	public DiferenciarHoras(Date dateInit, Date dateEnd){
		
		this.dateInit = dateInit;
		this.dateEnd = dateEnd;
		lastTimeLapse = null;
	}
	*/
	
	
	
	public void init(){
		this.dateInit = new Date();
		lastTimeLapse = null;
	}
	
	
	public timeLapse stop(){		
		
		this.dateEnd = new Date();		
		lastTimeLapse = diferenciaHoras(this.dateInit,this.dateEnd);		
		return lastTimeLapse;
	}
	
	
	
	/**
     * Calcula la diferencia entre dos horas
     * 
     * @param fInicial
     * @param fFinal
     * @return
     */
    private static timeLapse diferenciaHoras(Date fInicial, Date fFinal)
	{		
		// Crear 2 instancias de Calendar
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		
		cal1.setTime(fInicial);
		cal2.setTime(fFinal);
		
		// conseguir la representacion de la fecha en milisegundos
        long milis1 = cal1.getTimeInMillis();
        long milis2 = cal2.getTimeInMillis();

        // calcular la diferencia en milisengundos
        long diff = milis2 - milis1;

        // calcular la diferencia en segundos
        long diffSeconds = diff / 1000;

        // calcular la diferencia en minutos
        long diffMinutes = diff / (60 * 1000);

        // calcular la diferencia en horas
        long diffHours = diff / (60 * 60 * 1000);

        // calcular la diferencia en dias
        long diffDays = diff / (24 * 60 * 60 * 1000);

        /*
        System.out.println("En milisegundos: " + diff + " milisegundos.");
        System.out.println("En segundos: " + diffSeconds + " segundos.");
        System.out.println("En minutos: " + diffMinutes + " minutos.");
        System.out.println("En horas: " + diffHours + " horas.");
        System.out.println("En dias: " + diffDays + " dias.");
		*/
        //Log.e("diferenciaHoras", "En milisegundos: " + diff + " milisegundos.");
        //Log.e("diferenciaHoras", "En segundos: " + diffSeconds + " segundos.");
        
        timeLapse tiempo = new timeLapse();
        tiempo.diffMilisegundos = diff;
        tiempo.diffSegundos = diffSeconds;        
        tiempo.diffMinutos = diffMinutes;
        tiempo.diffHoras = diffHours;
        tiempo.diffDias = diffDays;
        
		return tiempo;
	}
    
   
    
    public static class timeLapse
    {
    	//TODO un toString para convertir a fecha (date o calendar)
    	
    	private Long diffMilisegundos;
    	private Long diffSegundos;
    	private Long diffMinutos;
    	private Long diffHoras;
    	private Long diffDias;    	
    	
		public Long getDiffMilisegundos() {
			return diffMilisegundos;
		}
		public void setDiffMilisegundos(Long diffMilisegundos) {
			this.diffMilisegundos = diffMilisegundos;
		}
		public Long getDiffSegundos() {
			return diffSegundos;
		}
		public void setDiffSegundos(Long diffSegundos) {
			this.diffSegundos = diffSegundos;
		}
		public Long getDiffMinutos() {
			return diffMinutos;
		}
		public void setDiffMinutos(Long diffMinutos) {
			this.diffMinutos = diffMinutos;
		}
		public Long getDiffHoras() {
			return diffHoras;
		}
		public void setDiffHoras(Long diffHoras) {
			this.diffHoras = diffHoras;
		}
		public Long getDiffDias() {
			return diffDias;
		}
		public void setDiffDias(Long diffDias) {
			this.diffDias = diffDias;
		}   
		
		
    }

    /*
    @Override
	public String toString() {
		return toString(eAlgo.dd);		
	}
	
	public String toString(eAlgo algo){
		StringBuilder salida = new StringBuilder("");
		
		if (lastTimeLapse == null)
			return salida.toString();
		
		if(algo == eAlgo.dd){
			salida.append(this.lastTimeLapse.getDiffDias() + " Dias; ");
			salida.append(this.lastTimeLapse.getDiffHoras() + " horas; ");
			salida.append(this.lastTimeLapse.getDiffMinutos() + " minutos; ");
			salida.append(this.lastTimeLapse.getDiffSegundos() + " segundos; ");
			salida.append(this.lastTimeLapse.getDiffMilisegundos() + " milisegundos. ");
		}else if(algo == eAlgo.hh){			
			salida.append(this.lastTimeLapse.getDiffHoras() + " Horas; ");
			salida.append(this.lastTimeLapse.getDiffMinutos() + " minutos; ");
			salida.append(this.lastTimeLapse.getDiffSegundos() + " segundos; ");
			salida.append(this.lastTimeLapse.getDiffMilisegundos() + " milisegundos. ");
		}else if(algo == eAlgo.mm){			
			salida.append(this.lastTimeLapse.getDiffMinutos() + " Minutos; ");
			salida.append(this.lastTimeLapse.getDiffSegundos() + " segundos; ");
			salida.append(this.lastTimeLapse.getDiffMilisegundos() + " milisegundos. ");
		}else if(algo == eAlgo.ss){			
			salida.append(this.lastTimeLapse.getDiffSegundos() + " Segundos; ");
			salida.append(this.lastTimeLapse.getDiffMilisegundos() + " milisegundos. ");
		}else if(algo == eAlgo.ml){			
			salida.append(this.lastTimeLapse.getDiffMilisegundos() + " milisegundos. ");
		}
		return salida.toString();
	}
    */
    
    
    

}
